/*
 * Created by SharpDevelop.
 * user: Robertux
 * Date: 10/03/2008
 * Time: 21:38
 * 
 * 
 */
using System;
using System.Data;
using System.Data.SQLite;
using System.Collections.Generic;
using DataLayer;

namespace Inventador
{
	/// <summary>
	/// Description of MyClass.
	/// </summary>
	public class Usuario
	{
		#region Campos
		
		private int _id;
		private string _nombre;
		private string _clave;
		private string _tipo;
		
		public const string ADMINISTRADOR = "a";
		public const string NORMAL = "n";
		
		#endregion
		
		#region Propiedades
		
		public int Id
		{
			get { return this._id; }
			set { this._id = value; }
		}
		
		public string Nombre
		{
			get { return this._nombre; }
			set { this._nombre = value; }
		}
		
		public string Clave
		{
			get { return this._clave; }
			set { this._clave = value; }
		}
		
		public string Tipo
		{
			get { return this._tipo; }
			set { this._tipo = value; }
		}
		
		#endregion
		
		#region Metodos
		
		public Usuario(int pId, string pNombre, string pClave, string pTipo)
		{
			this.Id = pId;
			this.Nombre = pNombre;
			this.Clave = pClave;
			this.Tipo = pTipo;
		}
		
		public bool GetFromDb(BaseDatos bdatos)
		{
			bdatos.Conectar();
			SQLiteDataReader lector = bdatos.EjecutarConsulta("select * from Usuario where id = " + this.Id.ToString());
			if(lector.HasRows)
			{
				lector.Read();
				this.Nombre = lector["nombre"].ToString();
				this.Clave = lector["clave"].ToString();
				this.Tipo = lector["tipousr"].ToString();
				bdatos.Desconectar();
				return true;
			}
			bdatos.Desconectar();
			return false;
		}
		
		public bool GetFromDbByNomClave(BaseDatos bdatos)
		{
			bdatos.Conectar();
			SQLiteDataReader lector = bdatos.EjecutarConsulta("select * from Usuario where nombre='" + this.Nombre + "' and clave = '" + this.Clave + "'");
			if(lector.HasRows)
			{
				lector.Read();
				this.Id = int.Parse(lector["id"].ToString());
				this.Tipo = lector["tipousr"].ToString();
				bdatos.Desconectar();
				return true;
			}
			bdatos.Desconectar();
			return false;
		}
		
		public static List<Usuario> GetList(BaseDatos bdatos, string condicion)
		{
			List<Usuario> usuarios = new List<Usuario>();
			string consulta = "SELECT * FROM Usuario";
			if(condicion != "") 
				consulta += " WHERE " + condicion;
			bdatos.Conectar();
			SQLiteDataReader lector = bdatos.EjecutarConsulta(consulta);
			if(lector.HasRows)
				while(lector.Read())
				usuarios.Add(new Usuario(int.Parse(lector["id"].ToString()), lector["nombre"].ToString(), lector["clave"].ToString(), lector["tipousr"].ToString()));
			bdatos.Desconectar();
			return usuarios;
		}
		
		public void Insert(BaseDatos bdatos)
		{
			bdatos.Conectar();
			bdatos.EjecutarOperacion("insert into Usuario values(" + this.Id.ToString() + ", '" + this.Nombre + "', '" + this.Clave + "','" + this.Tipo + "')");
			bdatos.Desconectar();
		}
		
		public void Update(BaseDatos bdatos)
		{
			bdatos.Conectar();
			bdatos.EjecutarOperacion("update Usuario set nombre = '" + this.Nombre + "', clave = '" + this.Clave + "', tipousr='" + this.Tipo + "' where id=" + this.Id.ToString());
			bdatos.Desconectar();
		}
		
		public void Delete(BaseDatos bdatos)
		{
			bdatos.Conectar();
			bdatos.EjecutarOperacion("delete from Usuario where id =" + this.Id.ToString());
			bdatos.Desconectar();
		}
		
		public static int GetMaxID(BaseDatos bdatos)
		{
			bdatos.Conectar();
			int maxId = bdatos.EjecutarEscalar("select max(id) from Usuario");
			bdatos.Desconectar();
			return maxId;
		}
		
		
		#endregion
	}
}
